home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3 (Developer)…68k, x86, SPARC, PA-RISC] / NeXTSTEP 3.3 Dev Intel.iso / NextDeveloper / Headers / bsd / rpcsvc / yp_prot.h < prev    next >
C/C++ Source or Header  |  1990-01-22  |  9KB  |  328 lines

  1. /*    @(#)yp_prot.h    1.1 88/03/04 4.0NFSSRC SMI*/
  2.  
  3. /* 
  4.  * Copyright (c) 1988 by Sun Microsystems, Inc.
  5.  *  1.13 86/07/16 Copyr 1985 Sun Microsystems, Inc 
  6.  */
  7.  
  8.  
  9. /*
  10.  * This file contains symbols and structures defining the rpc protocol
  11.  * between the yellowpages clients and the yellowpages servers.  The servers
  12.  * are the yp database servers, and the yp binders.  
  13.  */
  14.  
  15. /*
  16.  * The following procedures are supported by the protocol:
  17.  * 
  18.  * YPPROC_NULL() returns () takes nothing, returns nothing.  This indicates
  19.  * that the yp server is alive.
  20.  * 
  21.  * YPPROC_DOMAIN (char *) returns (bool_t) TRUE.  Indicates that the
  22.  * responding yp server does serve the named domain; FALSE indicates no
  23.  * support.
  24.  * 
  25.  * YPPROC_DOMAIN_NONACK (char *) returns (TRUE) if the yp server does serve
  26.  * the named domain, otherwise does not return.  Used in the broadcast case.
  27.  * 
  28.  * YPPROC_MATCH (struct ypreq_key) returns (struct ypresp_val).  Returns the
  29.  * right-hand value for a passed left-hand key, within a named map and
  30.  * domain.
  31.  * 
  32.  * YPPROC_FIRST (struct ypreq_nokey) returns (struct ypresp_key_val).
  33.  * Returns the first key-value pair from a named domain and map.
  34.  * 
  35.  * YPPROC_NEXT (struct ypreq_key) returns (struct ypresp_key_val).  Returns
  36.  * the key-value pair following a passed key-value pair within a named
  37.  * domain and map.
  38.  *
  39.  * YPPROC_XFR (struct ypreq_xfr) returns nothing.  Indicates to a server that
  40.  * a map should be updated.
  41.  *
  42.  * YPPROC_CLEAR    takes nothing, returns nothing.  Instructs a yp server to
  43.  * close the current map, so that old versions of the disk file don't get
  44.  * held open.
  45.  * 
  46.  * YPPROC_ALL (struct ypreq_nokey), returns
  47.  *     union switch (bool more) {
  48.  *        TRUE:    (struct ypresp_key_val);
  49.  *        FALSE:    (struct) {};
  50.  *    }
  51.  *
  52.  * YPPROC_MASTER (struct ypreq_nokey), returns (ypresp_master)
  53.  *
  54.  * YPPROC_ORDER (struct ypreq_nokey), returns (ypresp_order)
  55.  *
  56.  * YPPROC_MAPLIST (char *), returns (struct ypmaplist *)
  57.  */
  58. #ifndef BOOL_DEFINED
  59. typedef unsigned int bool;
  60. #define BOOL_DEFINED
  61. #endif
  62.  
  63. extern bool xdr_datum();
  64. extern bool xdr_ypdomain_wrap_string();
  65. extern bool xdr_ypmap_wrap_string();
  66. extern bool xdr_ypreq_key();
  67. extern bool xdr_ypreq_nokey();
  68. extern bool xdr_ypreq_xfr();
  69. extern bool xdr_ypresp_val();
  70. extern bool xdr_ypresp_key_val();
  71. extern bool xdr_ypbind_resp();
  72. extern bool xdr_ypbind_setdom();
  73. extern bool xdr_yp_inaddr();
  74. extern bool xdr_ypmap_parms();
  75. extern bool xdr_ypowner_wrap_string();
  76. extern bool xdr_yppushresp_xfr();
  77. extern bool xdr_ypresp_order();
  78. extern bool xdr_ypresp_master();
  79. extern bool xdr_ypall();
  80. extern bool xdr_ypresp_maplist();
  81.  
  82. /* Program and version symbols, magic numbers */
  83.  
  84. #define YPPROG        ((u_long)100004)
  85. #define YPVERS        ((u_long)2)
  86. #define YPVERS_ORIG    ((u_long)1)
  87. #define YPMAXRECORD    ((u_long)1024)
  88. #define YPMAXDOMAIN    ((u_long)64)
  89. #define YPMAXMAP    ((u_long)64)
  90. #define YPMAXPEER    ((u_long)256)
  91.  
  92. /* byte size of a large yp packet */
  93. #define YPMSGSZ        1600
  94.  
  95. #ifndef DATUM
  96. typedef struct {
  97.     char    *dptr;
  98.     int    dsize;
  99. } datum;
  100. #define DATUM
  101. #endif
  102.  
  103. struct ypmap_parms {
  104.     char *domain;            /* Null string means not available */
  105.     char *map;            /* Null string means not available */
  106.     unsigned long int ordernum;    /* 0 means not available */
  107.     char *owner;            /* Null string means not available */
  108. };
  109.  
  110. /*
  111.  * Request parameter structures
  112.  */
  113.  
  114. struct ypreq_key {
  115.     char *domain;
  116.     char *map;
  117.     datum keydat;
  118. };
  119.  
  120. struct ypreq_nokey {
  121.     char *domain;
  122.     char *map;
  123. };
  124.  
  125. struct ypreq_xfr {
  126.     struct ypmap_parms map_parms;
  127.     unsigned long transid;
  128.     unsigned long proto;
  129.     unsigned short port;
  130. };
  131. #define ypxfr_domain map_parms.domain
  132. #define ypxfr_map map_parms.map
  133. #define ypxfr_ordernum map_parms.ordernum
  134. #define ypxfr_owner map_parms.owner
  135.  
  136. /*
  137.  * Response parameter structures
  138.  */
  139.  
  140. struct ypresp_val {
  141.     long unsigned status;
  142.     datum valdat;
  143. };
  144.  
  145. struct ypresp_key_val {
  146.     long unsigned status;
  147.     datum keydat;
  148.     datum valdat;
  149. };
  150.  
  151. struct ypresp_master {
  152.     long unsigned status;
  153.     char *master;
  154. };
  155.  
  156. struct ypresp_order {
  157.     long unsigned status;
  158.     unsigned long int ordernum;
  159. };
  160.  
  161. struct ypmaplist {
  162.     char ypml_name[YPMAXMAP + 1];
  163.     struct ypmaplist *ypml_next;
  164. };
  165.  
  166. struct ypresp_maplist {
  167.     long unsigned status;
  168.     struct ypmaplist *list;
  169. };
  170.  
  171. /*
  172.  * Procedure symbols.  YPPROC_NULL, YPPROC_DOMAIN, and YPPROC_DOMAIN_NONACK
  173.  * must keep the same values (0, 1, and 2) that they had in the first version
  174.  * of the protocol.
  175.  */
  176.  
  177. #define YPPROC_NULL    ((u_long)0)
  178. #define YPPROC_DOMAIN    ((u_long)1)
  179. #define YPPROC_DOMAIN_NONACK ((u_long)2)
  180. #define YPPROC_MATCH    ((u_long)3)
  181. #define YPPROC_FIRST    ((u_long)4)
  182. #define YPPROC_NEXT    ((u_long)5)
  183. #define YPPROC_XFR    ((u_long)6)
  184. #define YPPROC_CLEAR    ((u_long)7)
  185. #define YPPROC_ALL    ((u_long)8)
  186. #define YPPROC_MASTER    ((u_long)9)
  187. #define YPPROC_ORDER    ((u_long)10)
  188. #define YPPROC_MAPLIST    ((u_long)11)
  189.  
  190. /* Return status values */
  191.  
  192. #define YP_TRUE         ((long)1)    /* General purpose success code */
  193. #define YP_NOMORE     ((long)2)    /* No more entries in map */
  194. #define YP_FALSE     ((long)0)    /* General purpose failure code */
  195. #define YP_NOMAP     ((long)-1)    /* No such map in domain */
  196. #define YP_NODOM     ((long)-2)    /* Domain not supported */
  197. #define YP_NOKEY     ((long)-3)    /* No such key in map */
  198. #define YP_BADOP     ((long)-4)    /* Invalid operation */
  199. #define YP_BADDB     ((long)-5)    /* Server data base is bad */
  200. #define YP_YPERR     ((long)-6)    /* YP server error */
  201. #define YP_BADARGS     ((long)-7)    /* Request arguments bad */
  202. #define YP_VERS        ((long)-8)    /* YP server version mismatch - server
  203.                      *   can't supply requested service. */
  204.  
  205. /*
  206.  * Domain binding data structure, used by ypclnt package and ypserv modules.
  207.  * Users of the ypclnt package (or of this protocol) don't HAVE to know about
  208.  * it, but it must be available to users because _yp_dobind is a public
  209.  * interface.
  210.  */
  211.  
  212. struct dom_binding {
  213.     struct dom_binding *dom_pnext;
  214.     char dom_domain[YPMAXDOMAIN + 1];
  215.     struct sockaddr_in dom_server_addr;
  216.     unsigned short int dom_server_port;
  217.     int dom_socket;
  218.     CLIENT *dom_client;
  219.     unsigned short int dom_local_port;
  220.     long int dom_vers;
  221. };
  222.  
  223.  
  224. /*
  225.  *        Protocol between clients and yp binder servers
  226.  */
  227.  
  228. /*
  229.  * The following procedures are supported by the protocol:
  230.  *
  231.  * YPBINDPROC_NULL() returns ()
  232.  *     takes nothing, returns nothing
  233.  *
  234.  * YPBINDPROC_DOMAIN takes (char *) returns (struct ypbind_resp)
  235.  *
  236.  * YPBINDPROC_SETDOM takes (struct ypbind_setdom) returns nothing
  237.  */
  238.  
  239. /* Program and version symbols, magic numbers */
  240.  
  241. #define YPBINDPROG        ((u_long)100007)
  242. #define YPBINDVERS        ((u_long)2)
  243. #define YPBINDVERS_ORIG        ((u_long)1)
  244.  
  245. /* Procedure symbols */
  246.  
  247. #define YPBINDPROC_NULL        ((u_long)0)
  248. #define YPBINDPROC_DOMAIN    ((u_long)1)
  249. #define YPBINDPROC_SETDOM    ((u_long)2)
  250. /*
  251.  * Response structure and overall result status codes.  Success and failure
  252.  * represent two separate response message types.
  253.  */
  254.  
  255. enum ypbind_resptype {YPBIND_SUCC_VAL = 1, YPBIND_FAIL_VAL = 2};
  256.  
  257. struct ypbind_binding {
  258.     struct in_addr ypbind_binding_addr;    /* In network order */
  259.     unsigned short int ypbind_binding_port;    /* In network order */
  260. };
  261. struct ypbind_resp {
  262.     enum ypbind_resptype ypbind_status;
  263.     union {
  264.         unsigned long ypbind_error;
  265.         struct ypbind_binding ypbind_bindinfo;
  266.     } ypbind_respbody;
  267. };
  268.  
  269.  
  270. /* Detailed failure reason codes for response field ypbind_error*/
  271.  
  272. #define YPBIND_ERR_ERR 1        /* Internal error */
  273. #define YPBIND_ERR_NOSERV 2        /* No bound server for passed domain */
  274. #define YPBIND_ERR_RESC 3        /* System resource allocation failure */
  275.  
  276. /*
  277.  * Request data structure for ypbind "Set domain" procedure.
  278.  */
  279. struct ypbind_setdom {
  280.     char ypsetdom_domain[YPMAXDOMAIN + 1];
  281.     struct ypbind_binding ypsetdom_binding;
  282.     unsigned short ypsetdom_vers;
  283. };
  284. #define ypsetdom_addr ypsetdom_binding.ypbind_binding_addr
  285. #define ypsetdom_port ypsetdom_binding.ypbind_binding_port
  286.  
  287. /*
  288.  *        Protocol between clients (ypxfr, only) and yppush
  289.  *        yppush speaks a protocol in the transient range, which
  290.  *        is supplied to ypxfr as a command-line parameter when it
  291.  *        is activated by ypserv.
  292.  */
  293. #define YPPUSHVERS        ((u_long) 1)
  294. #define YPPUSHVERS_ORIG        ((u_long)1)
  295.  
  296. /* Procedure symbols */
  297.  
  298. #define YPPUSHPROC_NULL        ((u_long)0)
  299. #define YPPUSHPROC_XFRRESP    ((u_long)1)
  300.  
  301. struct yppushresp_xfr {
  302.     unsigned long transid;
  303.     unsigned long status;
  304. };
  305.  
  306. /* Status values for yppushresp_xfr.status */
  307.  
  308. #define YPPUSH_SUCC    ((long)1)    /* Success */
  309. #define YPPUSH_AGE    ((long)2)    /* Master's version not newer */
  310. #define YPPUSH_NOMAP     ((long)-1)    /* Can't find server for map */
  311. #define YPPUSH_NODOM     ((long)-2)    /* Domain not supported */
  312. #define YPPUSH_RSRC     ((long)-3)    /* Local resouce alloc failure */
  313. #define YPPUSH_RPC     ((long)-4)    /* RPC failure talking to server */
  314. #define YPPUSH_MADDR    ((long)-5)    /* Can't get master address */
  315. #define YPPUSH_YPERR     ((long)-6)    /* YP server/map db error */
  316. #define YPPUSH_BADARGS     ((long)-7)    /* Request arguments bad */
  317. #define YPPUSH_DBM    ((long)-8)    /* Local dbm operation failed */
  318. #define YPPUSH_FILE    ((long)-9)    /* Local file I/O operation failed */
  319. #define YPPUSH_SKEW    ((long)-10)    /* Map version skew during transfer */
  320. #define YPPUSH_CLEAR    ((long)-11)    /* Can't send "Clear" req to local
  321.                      *   ypserv */
  322. #define YPPUSH_FORCE    ((long)-12)    /* No local order number in map -
  323.                      *   use -f flag. */
  324. #define YPPUSH_XFRERR    ((long)-13)    /* ypxfr error */
  325. #define YPPUSH_REFUSED    ((long)-14)    /* Transfer request refused by ypserv */
  326.  
  327.  
  328.